import BaseVenueProcessor from './BaseVenueProcessor.js';
import { getTuoDeVenueSettings } from '../request.js';

/**
 * 拓德网球俱乐部场地数据处理器
 */
export class TuoDeProcessor extends BaseVenueProcessor {
  constructor() {
    super();
    this.venueName = '拓德网球俱乐部';
  }

  /**
   * 获取拓德网球俱乐部场地预约设置
   * @param {Object} params - 查询参数 { basicId, merchantId, userId, reserveDate }
   * @returns {Promise} 请求Promise
   */
  async getVenueSettings(params = {}) {
    // 设置默认参数
    const defaultParams = {
      basicId: "2112235080",
      merchantId: "10293",
      userId: "",
      reserveDate: "2025-08-13"
    };
    
    // 合并参数
    const requestData = { ...defaultParams, ...params };
    
    return await getTuoDeVenueSettings(requestData);
  }

  /**
   * 验证数据是否有效
   * @param {Object} data - 原始场地数据
   * @returns {boolean} 数据是否有效
   */
  validateData(data) {
    // 处理两种不同的数据格式
    // 格式1: data包含data属性，data属性包含siteInfoTOs和timeIntervalTOs数组
    // 格式2: data直接包含siteInfoTOs和timeIntervalTOs数组
    const actualData = data.data || data;
    
    return actualData && 
           actualData.siteInfoTOs && 
           Array.isArray(actualData.siteInfoTOs) && 
           actualData.siteInfoTOs.length > 0 &&
           actualData.timeIntervalTOs && 
           Array.isArray(actualData.timeIntervalTOs) && 
           actualData.timeIntervalTOs.length > 0;
  }

  /**
   * 按场地名称分组
   * @param {Object} data - 原始场地数据
   * @returns {Map} 场地Map
   */
  groupVenues(data) {
    const venueMap = new Map();
    
    // 处理两种不同的数据格式
    const actualData = data.data || data;
    
    // 遍历场地数据
    actualData.siteInfoTOs.forEach(site => {
      const venueName = site.name;
      if (!venueMap.has(venueName)) {
        venueMap.set(venueName, {
          name: venueName,
          siteId: site.siteId,
          timeSlots: []
        });
      }
    });
    
    return venueMap;
  }

  /**
   * 处理时间槽
   * @param {Map} venueMap - 场地Map
   * @param {Object} data - 原始场地数据
   * @param {String} selectedDate - 选中的日期
   */
  processTimeSlots(venueMap, data, selectedDate) {
    // 处理两种不同的数据格式
    const actualData = data.data || data;
    
    // 遍历时间间隔数据
    if (actualData.timeIntervalTOs && Array.isArray(actualData.timeIntervalTOs)) {
      actualData.timeIntervalTOs.forEach(timeInterval => {
        // 遍历每个时间间隔的记录
        if (timeInterval.records && Array.isArray(timeInterval.records)) {
          timeInterval.records.forEach(record => {
            // 找到对应的场地
            for (const [venueName, venue] of venueMap) {
              if (venue.siteId === record.siteId) {
                // 添加时间槽信息
                venue.timeSlots.push({
                  time: timeInterval.timeInterval,
                  isFree: record.siteLockStatus === 0, // siteLockStatus为0表示可预约
                  price: record.basePrice || 0,
                  beginDatetime: `${selectedDate} ${timeInterval.timeInterval.split('-')[0]}:00`,
                  endDatetime: `${selectedDate} ${timeInterval.timeInterval.split('-')[1]}:00`
                });
                break;
              }
            }
          });
        }
      });
    }
  }

  /**
   * 处理场地数据
   * @param {Object} data - 原始场地数据
   * @param {String} selectedDate - 选中的日期
   * @returns {Array} 处理后的场地列表
   */
  process(data, selectedDate) {
    // 验证数据
    if (!this.validateData(data)) {
      console.error('拓德网球俱乐部数据验证失败');
      return [];
    }
    
    // 按场地名称分组
    const venueMap = this.groupVenues(data);
    
    // 处理时间槽
    this.processTimeSlots(venueMap, data, selectedDate);
    
    // 转换为场地列表
    return this.convertToVenueList(venueMap);
  }
  
  /**
   * 转换为场地列表
   * @param {Map} venueMap - 场地Map
   * @returns {Array} 场地列表
   */
  convertToVenueList(venueMap) {
    const venueList = [];
    
    venueMap.forEach((venue, index) => {
      venueList.push({
        id: 8000 + index, // 给拓德网球俱乐部场地分配ID
        name: venue.name,
        address: '拓德网球俱乐部',
        latitude: 23.0489,
        longitude: 113.7447,
        phone: '0769-87654328',
        rating: 4.5,
        price: 0,
        facilities: ['室外场地', '专业教练', '器材租赁'],
        image: '',
        distance: 6.0,
        timeSlots: venue.timeSlots,
        dataSource: '拓德网球俱乐部',
        siteId: venue.siteId
      });
    });
    
    return venueList;
  }
}

export default TuoDeProcessor;